package com.mes.biz.service.impl;

import java.util.List;

import com.mes.biz.domain.BizMeasure;
import com.mes.biz.mapper.BizMeasureMapper;
import com.mes.common.exception.BizException;
import com.mes.common.utils.SecurityUtils;
import com.mes.common.utils.StringUtils;
import com.mes.system.domain.SysTenant;
import com.mes.system.service.SysTenantService;
import com.mes.system.strategy.AutoCodeUtil;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.pagehelper.PageInfo;
import com.mes.common.core.domain.BaseEntity;
import com.mes.common.core.service.BaseServiceImpl;
import com.mes.biz.mapper.BizPartsMapper;
import com.mes.biz.domain.BizParts;
import com.mes.biz.service.BizPartsService;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * 配件单Service业务层处理
 * @author swf
 * @email swf
 * @date 2023-09-12
 */
@Service
@Transactional(readOnly = true)
public class BizPartsServiceImpl extends BaseServiceImpl<BizPartsMapper, BizParts> implements BizPartsService {

    private static final Logger log = LoggerFactory.getLogger(BizPartsServiceImpl.class);

    @Resource
    private BizPartsMapper bizPartsMapper;
    @Resource
    private SysTenantService sysTenantService;
    @Resource
    private AutoCodeUtil autoCodeUtil;

    /**
     * 获取单条数据
     * @param bizParts 配件单
     * @return 配件单
     */
    @Override
    public BizParts get(BizParts bizParts) {
        BizParts dto = super.get(bizParts);
        return dto;
    }

    /**
     * 获取单条数据
     * @param id 配件单id
     * @return 配件单
     */
    @Override
    public BizParts get(String id) {
        BizParts dto = super.get(id);
        return dto;
    }

    /**
     * 查询配件单列表
     * @param bizParts 配件单
     * @return 配件单
     */
    @Override
    public List<BizParts> findList(BizParts bizParts) {
		List<BizParts> bizPartsList = super.findList(bizParts);
        return bizPartsList;
    }

    /**
     * 分页查询配件单列表
     * @param bizParts 配件单
     * @return 配件单
     */
    @Override
    public PageInfo<BizParts> findPage(BizParts bizParts) {
		PageInfo<BizParts> page = super.findPage(bizParts);
        return page;
    }

    /**
     * 保存配件单
     * @param bizParts
     * @return 结果
     */
    @Override
    public boolean save(BizParts bizParts) {
        return super.save(bizParts);
    }

    /**
     * 删除配件单信息
     * @param bizParts
     * @return 结果
     */
    @Override
    public boolean remove(BizParts bizParts) {
        return super.remove(bizParts);
    }

    /**
     * 批量删除配件单
     * @param ids 需要删除的配件单ID
     * @return 结果
     */
    @Transactional(readOnly = false)
    @Override
    public int deleteBizPartsByIds(String[] ids) {
        return mapper.deleteBizPartsByIds(ids, BaseEntity.DEL_FLAG_DELETE);
    }

    /**
     * 创建配件单
     * @param bizParts
     * @return
     */
    @Transactional(readOnly = false)
    @Override
    public boolean create(BizParts bizParts) {
        //return false;
        String tenantId = SecurityUtils.getTenantId();
        bizParts.setTenantId(tenantId);
        if(StringUtils.isEmpty(bizParts.getPartsNumber())) {
            SysTenant sysTenant = sysTenantService.get(tenantId);
            if (StringUtils.isEmpty(sysTenant.getLeader())){
                throw new BizException("请联系管理员添加测量单前缀!");
            }
            String code = autoCodeUtil.genSerialCode("PARTS_CODE",sysTenant.getLeader());
            bizParts.setPartsNumber(code);
        } else {
            if(getBizPartsByPartsNumber(bizParts.getPartsNumber())!=null) {
                throw new BizException("配件单编号已存在!");
            }
        }
        return save(bizParts);
    }

    /**
     * 修改配件单
     * @param bizParts
     * @return
     */
    @Transactional(readOnly = false)
    @Override
    public boolean update(BizParts bizParts) {
        //return false;
        if(StringUtils.isEmpty(bizParts.getPartsNumber())) {
            throw new BizException("配件单编号不能为空!");
        }
        BizParts existsPartsNumber= getBizPartsByPartsNumber(bizParts.getPartsNumber());
        if(existsPartsNumber != null && !existsPartsNumber.getId().equals(bizParts.getId()) ) {
            throw new BizException("配件单编号已存在!");
        }
        return save(bizParts);
    }

    /**
     * 根据配件单编号查询配件单信息
     * @param partsNumber
     * @return
     */
    @Override
    public BizParts getBizPartsByPartsNumber(String partsNumber) {
        return bizPartsMapper.getBizPartsByPartsNumber(partsNumber);
    }

}
